DEFINE CLASS cl_categoria as Custom

id_categoria=0
descripcion=""
monto=0;
	
PROCEDURE getid_categoria
RETURN this.id_categoria
ENDPROC

PROCEDURE setid_categoria
LPARAMETERS nuevo
this.id_categoria=nuevo
ENDPROC

PROCEDURE getdescripcion
RETURN this.descripcion
ENDPROC

PROCEDURE setdescripcion
LPARAMETERS nuevo
this.descripcion=nuevo
ENDPROC

PROCEDURE getmonto
RETURN this.monto
ENDPROC

PROCEDURE setmonto
LPARAMETERS nuevo
this.monto=nuevo
ENDPROC

PROCEDURE nueva_categoria
USE DATA1/categoria
INSERT INTO categoria (descripcion) VALUES (this.descripcion)
SELECT MAX(id_categoria)id FROM categoria into CURSOR cursorID
nuevoID=cursorID.id
USE IN categoria
USE DATA1/monto
INSERT INTO monto (fecha_desde,id_categoria,monto) VALUES (DATE(),nuevoID,this.monto)
USE IN monto
ENDPROC
	
PROCEDURE buscar_categoria
LPARAMETERS id, fech
SET DATE BRITISH
USE DATA1/categoria
SELECT * FROM categoria WHERE id_categoria=id INTO CURSOR cat
IF _tally==0 THEN 
USE  IN categoria
USE IN cat
return .f.
else
this.descripcion=cat.descripcion
USE DATA1/monto
SELECT id_categoria,MAX(fecha_desde)ultima_fecha FROM monto WHERE id_categoria=id AND fecha_desde<=fech GROUP BY id_categoria INTO CURSOR ultimosMontos
SELECT monto FROM monto INNER JOIN ultimosMontos ON monto.id_categoria=ultimosMontos.id_categoria AND ultimosMontos.ultima_fecha=monto.fecha_desde WHERE monto.id_categoria=id INTO CURSOR cur_monto 
this.monto=cur_monto.monto
ENDIF
USE IN cur_monto
USE IN monto
USE IN categoria	
USE IN ultimosmontos
ENDPROC
	
PROCEDURE borrar
SET DELETED on
USE DATA1/categoria
DELETE FROM categoria WHERE id_categoria=this.id_categoria
USE IN categoria
USE DATA1/monto
DELETE FROM monto WHERE id_categoria=this.id_categoria
USE IN monto
ENDPROC
	
PROCEDURE modificar
USE DATA1/categoria
UPDATE  categoria set descripcion=this.descripcion WHERE id_categoria=this.id_categoria
USE IN categoria
USE DATA1/monto
INSERT INTO monto (fecha_desde,id_categoria,monto) VALUES (DATE(),this.id_categoria,this.monto)
USE IN monto
ENDPROC		

PROCEDURE cargaCategorias
USE DATA1/categoria
SELECT * FROM categoria INTO CURSOR cur_categorias
LOCAL xml_categorias
CURSORTOXML("cur_categorias","xml_categorias",1,48)
USE IN categoria
RETURN xml_categorias

procedure mostrar_categoria
	LPARAMETERS ape
	USE DATA1/categoria
	SELECT * FROM categoria WHERE descripcion  like "%"+ALLTRIM(ape)+"%" into cursor cur_categorias
	LOCAL xml_categorias
	CURSORTOXML("cur_categorias","xml_categorias",1,48)
	USE IN categoria
	RETURN xml_categorias
	ENDPROC
	
ENDDEFINE
